package cn.lsp.sharkmall.service;

import cn.lsp.sharkmall.pojo.entity.Order;
import cn.lsp.sharkmall.pojo.entity.User;
import cn.lsp.sharkmall.pojo.vo.OrderDetailVO;
import cn.lsp.sharkmall.pojo.entity.UserAddress;
import cn.lsp.sharkmall.pojo.vo.OrderItemVO;
import cn.lsp.sharkmall.pojo.vo.ShoppingCartItemVO;
import cn.lsp.sharkmall.util.PageQueryUtil;
import cn.lsp.sharkmall.util.PageResult;

import java.util.List;

/**
 * @Description: 订单服务层接口
 * @Author: sweeterjava@163.com
 * @Date: 2023/2/13
 * @Time: 00:25
 */
public interface IOrderService {
    /**
     * 获取订单详情
     *
     * @param orderId
     * @return
     */
    OrderDetailVO getOrderDetailByOrderId(Long orderId);

    /**
     * 获取订单详情
     *
     * @param orderNo
     * @param userId
     * @return
     */
    OrderDetailVO getOrderDetailByOrderNo(String orderNo, Long userId);

    /**
     * 我的订单列表
     *
     * @param pageUtil
     * @return
     */
    PageResult getMyOrders(PageQueryUtil pageUtil);

    /**
     * 手动取消订单
     *
     * @param orderNo
     * @param userId
     * @return
     */
    String cancelOrder(String orderNo, Long userId);

    /**
     * 确认收货
     *
     * @param orderNo
     * @param userId
     * @return
     */
    String finishOrder(String orderNo, Long userId);

    String paySuccess(String orderNo, int payType);

    String saveOrder(User loginMallUser, UserAddress address, List<ShoppingCartItemVO> itemsForSave);

    /**
     * 后台分页
     *
     * @param pageUtil
     * @return
     */
    PageResult getOrdersPage(PageQueryUtil pageUtil);

    /**
     * 订单信息修改
     *
     * @param order
     * @return
     */
    String updateOrderInfo(Order order);

    /**
     * 配货
     *
     * @param ids
     * @return
     */
    String checkDone(Long[] ids);

    /**
     * 出库
     *
     * @param ids
     * @return
     */
    String checkOut(Long[] ids);

    /**
     * 关闭订单
     *
     * @param ids
     * @return
     */
    String closeOrder(Long[] ids);

    List<OrderItemVO> getOrderItems(Long orderId);
}
